home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
aminet
/
dev
/
src
/
boot.s
< prev
next >
Wrap
Text File
|
1992-10-06
|
7KB
|
437 lines
org $40000
load $40000
RASTER = $ff
BEGIN = 90
WIDTH = 20
HIGH = 150
Xc = [WIDTH*4]
Yc = [HIGH/2]
SIZE = WIDTH*HIGH
DEEP = 3
BASE = $0007
BPL1 = $0000
BPL2 = BPL1 + SIZE
BPL3 = BPL2 + SIZE
DATA = $7ff00
D = 720
K = 240
C = 126
;------------------------------------------------------------------------
START: dc.b 'DOS',0
dc.l 0
dc.l 880
movem.l a0-a6/d0-d7,-(sp)
clr.l 36(a1)
move.w #9,28(a1)
jsr -456(a6)
lea GFX(pc),a1
jsr -408(a6)
move.l d0,a0
move.l $26(a0),-(sp)
move.w #'do',5(a1)
lea $dff000,a6
lea COPPER(pc),a0
move.w #$7fff,$96(a6)
move.l a0,$80(a6)
clr.w $88(a6)
move.w #$83c0,$96(a6)
lea DATA,a5
moveq #BASE,d0
swap d0
move.l d0,(a5)
LOOP: bsr.s FLIP
bsr CLS
bsr CUBE
bsr.s FILL
btst #6,$bfe001
bne.s LOOP
bsr BLT
move.l (sp)+,$80(a6)
clr.w $88(a6)
clr.w $100(a6)
move.w #$83f0,$96(a6)
movem.l (sp)+,a0-a6/d0-d7
lea DOS(pc),a1
jsr -96(a6)
move.l d0,a0
move.l 22(a0),a0
moveq #0,d0
rts
;------------------------------------------------------------------------
FLIP: cmpi.b #RASTER,$6(a6)
bne.s FLIP
move.l (a5),d0
move.w #SIZE,d1
lea LIST(pc),a0
move.w d0,(a0)
add.w d1,d0
move.w d0,4(a0)
add.w d1,d0
move.w d0,8(a0)
add.w d1,d0
cmpi.w #[SIZE*DEEP]*3,d0
bne.s FLIP1
clr.w d0
FLIP1: move.l d0,(a5)
rts
;------------------------------------------------------------------------
FILL: move.l (a5),d0
addi.w #[SIZE*DEEP]-2,d0
move.l #$09f0000a,d1
bra.s BLITTER
CLS: move.l (a5),d0
addi.w #[SIZE*DEEP],d0
cmpi.w #[SIZE*DEEP]*3,d0
bne.s CLS1
clr.w d0
CLS1: move.l #$01000000,d1
BLITTER: bsr.s BLT
move.l d0,$50(a6)
move.l d0,$54(a6)
clr.l $64(a6)
move.l d1,$40(a6)
move.w #[DEEP*HIGH*64]+[WIDTH/2],$58(a6)
rts
;------------------------------------------------------------------------
BLT: btst #6,$2(a6)
bne.s BLT
rts
;------------------------------------------------------------------------
; d0 reserved
LINEINIT: bsr.s BLT
moveq #-1,d0
move.l d0,$44(a6)
move.w #$8000,d0
move.l d0,$72(a6)
rts
; d0-d1 : (x1,y1)
; d2-d3 : (x2,y2)
; d4-d5 : reserved
; a0 : screen
LINEDRAW: cmp.w d1,d3
bne.s LINE1
rts
LINE1: blt.s LINE2
exg d2,d0
exg d3,d1
LINE2: addq.w #1,d3
moveq #0,d4
sub.w d1,d3
bpl.s LINE3
neg.w d3
bra.s LINE4
LINE3: ori.b #1,d4
LINE4: sub.w d0,d2
bpl.s LINE5
neg.w d2
bra.s LINE6
LINE5: ori.b #2,d4
LINE6: move.w d2,d5
sub.w d3,d5
bpl.s LINE7
exg d3,d2
bra.s LINE8
LINE7: ori.b #4,d4
LINE8: ror.w #4,d0
ori.w #$0b00,d0
moveq #0,d5
move.b d0,d5
add.w d5,d5
move.b #$4a,d0
mulu #WIDTH,d1
add.w d5,d1
add.w d1,a0
move.b TABLE(pc,d4.w),d4
add.w d3,d3
bsr.s BLT
move.w d3,$62(a6)
sub.w d2,d3
bpl.s LINE9
ori.b #$42,d4
LINE9: move.w d4,$42(a6)
move.l d3,$50(a6)
sub.w d2,d3
move.w d3,$64(a6)
move.w d0,$40(a6)
move.l a0,$48(a6)
move.l a0,$54(a6)
moveq #WIDTH,d0
move.w d0,$60(a6)
move.w d0,$66(a6)
asl.w #6,d2
addi.w #64+2,d2
move.w d2,$58(a6)
rts
TABLE: dc.b 15,11,07,03,31,23,27,19
;------------------------------------------------------------------------
; d0-d2 (x,y,z)
; d3 sin
; d4 cos
; d5-d6 reserved
; a0 sin table
ROTATION: lea SINUS(pc),a0
move.b Alpha-DATA(a5),d5
bsr.s ROTATION1
move.b Beta-DATA(a5),d5
bsr.s ROTATION1
move.b Gamma-DATA(a5),d5
ROTATION1: bsr.s ROTATION2
move.w d6,d3
addi.b #$40,d5
bsr.s ROTATION2
move.w d6,d4
move.w d0,d5
move.w d1,d6
muls d4,d5
muls d3,d6
add.l d5,d6
asr.l #8,d6
move.w d0,d5
move.w d6,d0
move.w d1,d6
muls d3,d5
muls d4,d6
sub.l d5,d6
asr.l #8,d6
move.w d6,d1
exg d1,d2
exg d0,d1
rts
ROTATION2: move.b d5,d6
andi.w #$007f,d6
move.b (a0,d6.w),d6
tst.b d5
bpl.s ROTATION3
neg.w d6
ROTATION3: rts
SINUS: dc.b 0,6,12,18,25,31,37,43,49,56,62,68,74,80,86,92,97
dc.b 103,109,115,120,126,131,136,142,147,152,157,162
dc.b 167,171,176,181,185,189,193,197,201,205,209,212
dc.b 216,219,222,225,228,231,234,236,238,241,243,244
dc.b 246,248,249,251,252,253,254,254,255,255,255,255
dc.b 255,255,255,254,254,253,252,251,249,248,246,244
dc.b 243,241,238,236,234,231,228,225,222,219,216,212
dc.b 209,205,201,197,193,189,185,181,176,171,167,162
dc.b 157,152,147,142,136,131,126,120,115,109,103,97
dc.b 92,86,80,74,68,62,56,49,43,37,31,25,18,12,6
;------------------------------------------------------------------------
; d0-d2 : (x,y,z)
; d3 : reserved
PROJECTION: move.w #K,d3
addi.w #D,d2 ; z+D
ble.s PROJECTION1
muls d3,d0 ; x*K
muls d3,d1 ; y*K
divs d2,d0 ; x' = x*K / z+D
divs d2,d1 ; y' = y*K / z+D
addi.w #Xc,d0
addi.w #Yc,d1
PROJECTION1: rts
;------------------------------------------------------------------------
CUBE: addq.b #1,Alpha-DATA(a5)
addq.b #2,Beta-DATA(a5)
subq.b #1,Gamma-DATA(a5)
movem.w Palette-DATA(a5),d1/d2/d4
moveq #$0,d0
move.l d2,d3
move.l d4,d5
move.l d4,d6
move.l d4,d7
movem.w d0-d7,$180(a6)
lea COORDS(pc),a1
lea Points-DATA(a5),a2
move.l a2,a3
lea Z-DATA(a5),a4
moveq #7,d7
CUBE1: move.b (a1)+,d0
move.b (a1)+,d1
move.b (a1)+,d2
ext.w d0
ext.w d1
ext.w d2
bsr ROTATION
move.l d2,(a4)+
bsr.s PROJECTION
movem.w d0/d1,(a2)
addq.w #4,a2
dbf d7,CUBE1
pea Palette-DATA(a5)
lea FACES(pc),a1
move.l (a5),a4
moveq #%01010100,d7
CUBE2: lea Buffer-DATA(a5),a0
move.l a0,a2
moveq #0,d0
moveq #4-1,d1
CUBE3: move.b (a1)+,d0
move.l (a3,d0.w),(a0)
addq.w #4,a0
dbf d1,CUBE3
move.l (a2),(a0)
movem.w (a2),d0-d5
sub.w d0,d2 ; x2-x1
sub.w d0,d4 ; x3-x1
sub.w d1,d3 ; y2-y1
sub.w d1,d5 ; y3-y1
muls d5,d2 ; (y3-y1)*(x2-x1)
muls d4,d3 ; (x3-x1)*(y2-y1)
sub.l d2,d3
ble.s CUBE6
lea Z-DATA(a5),a0
moveq #0,d2
move.b -1(a1),d2
move.l (a0,d2.w),d0
move.b -3(a1),d2
move.l (a0,d2.w),d1
add.w d1,d0
bge.s CUBE4
neg.w d0
CUBE4: lsr.w #4,d0
move.l (sp),a0
move.w d0,(a0)
bsr LINEINIT
moveq #4-1,d6
CUBE5: movem.w (a2),d0-d3
move.l a4,a0
bsr LINEDRAW
addq.w #4,a2
dbf d6,CUBE5
CUBE6: add.b d7,d7
bcc.s CUBE7
addq.l #2,(sp)
add.w #SIZE,a4
CUBE7: tst.b d7
bne CUBE2
addq.l #4,sp
rts
;------------------------------------------------------------------------
COPPER: dc.w $008e
dc.b BEGIN
dc.b $d1
dc.w $0090
dc.b BEGIN + HIGH
dc.b $71
dc.w $0092,$0060
dc.w $0094,$00a8
dc.w $00e0,BASE
dc.w $00e4,BASE
dc.w $00e8,BASE
dc.w $00e2
LIST: dc.w BPL1
dc.w $00e6,BPL2
dc.w $00ea,BPL3
dc.w $0100,$3000
dc.l -2
COORDS: dc.b C, C, C
dc.b C,-C, C
dc.b C,-C,-C
dc.b C, C,-C
dc.b -C, C, C
dc.b -C,-C, C
dc.b -C,-C,-C
dc.b -C, C,-C
FACES: dc.b 0,4,8,12
dc.b 20,16,28,24
dc.b 0,12,28,16
dc.b 8,4,20,24
dc.b 0,16,20,4
dc.b 28,12,8,24
dc.b '*'
GFX: dc.b "graph"
DOS: dc.b "ics.library",0
dc.b 169,"sep92 Z-One"
x:
;------------------------------------------------------------------------
org DATA
load DATA
Screen: dc.l 0
Palette: dc.w 0
dc.w 0
dc.w 0
Z: dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
Points: dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
Buffer: dc.l 0
dc.l 0
dc.l 0
dc.l 0
dc.l 0
Alpha: dc.b 0
Beta: dc.b 0
Gamma: dc.b 0